package org.spark.api.util;

import org.apache.hadoop.hbase.util.Bytes;

import java.math.BigDecimal;
import java.util.ArrayList;

/**
 * @author chenwy
 */
public class ColumnValueConverter {




    public static Object converter(byte[] bytes, Class<?> valueClass, boolean useMsgPack) {

        if (bytes != null && valueClass != null) {

            try{
                if(useMsgPack){
                    MsgPackReader reader = MsgPackReader.create();
                    if (valueClass == String.class) {
                        return reader.getString(bytes);
                    } else if (valueClass == Long.class || valueClass == long.class) {
                        return reader.getLong(bytes);
                    } else if (valueClass == Integer.class || valueClass == int.class) {
                        return Bytes.toInt(bytes);
                    } else if (valueClass == Short.class || valueClass == short.class) {
                        return reader.getShort(bytes);
                    } else if (valueClass == Double.class || valueClass == double.class) {
                        return reader.getDouble(bytes);
                    } else if (valueClass == Boolean.class || valueClass == boolean.class) {
                        return reader.getBoolean(bytes);
                    } else if (valueClass == Float.class || valueClass == float.class) {
                        return reader.getFloat(bytes);
                    } else {

                    }
                }else{
                    if (valueClass == String.class) {
                        return Bytes.toString(bytes);
                    } else if (valueClass == Long.class || valueClass == long.class) {
                        return Bytes.toLong(bytes);
                    } else if (valueClass == Integer.class || valueClass == int.class) {
                        return Bytes.toInt(bytes);
                    } else if (valueClass == Short.class || valueClass == short.class) {
                        return Bytes.toShort(bytes);
                    } else if (valueClass == Double.class || valueClass == double.class) {
                        return Bytes.toDouble(bytes);
                    } else if (valueClass == Boolean.class || valueClass == boolean.class) {
                        return Bytes.toBoolean(bytes);
                    } else if (valueClass == Float.class || valueClass == float.class) {
                        return Bytes.toFloat(bytes);
                    } else if (valueClass == BigDecimal.class) {
                        return Bytes.toBigDecimal(bytes);
                    } else {

                    }
                }
            }catch (Exception e){
            }
        }
        return null;
    }




    public static void main(String[] args) {

        converter(new byte[1], new ArrayList<String>().getClass(), false);

        System.out.println(String.class);

        System.out.println(new ArrayList<String>().getClass());

        System.out.println(int.class == Integer.class);
    }

}
